package com.gdust.lease.web.admin.controller.system;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gdust.lease.common.result.Result;
import com.gdust.lease.model.entity.SystemPost;
import com.gdust.lease.model.enums.BaseStatus;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gdust.lease.web.admin.service.SystemPostService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 后台用户岗位管理接口
 * // 注：6个接口只涉及单表操作，都可以用通用service方法实现
 */
@RestController
@Tag(name = "后台用户岗位管理")
@RequestMapping("/admin/system/post")
public class SystemPostController {

    //注入岗位信息表的service
    @Autowired
    private SystemPostService systemPostService;

    /**
     * 分页获取岗位信息
     * @param current 当前页
     * @param size 每页记录数
     * @return
     */
    @Operation(summary = "分页获取岗位信息")
    @GetMapping("page")
    private Result<IPage<SystemPost>> page(@RequestParam long current, @RequestParam long size) {
        // 使用mybatis-plus分页插件创建分页对象，指定当前页和每页记录数
        IPage<SystemPost> page = new Page<>(current, size);
        //执行分页查询
        IPage<SystemPost> result = systemPostService.page(page);

        return Result.ok(result);
    }

    /**
     * 保存或更新岗位信息
     * @param systemPost 岗位信息表包含：岗位编码、岗位名称、岗位描述信息、岗位状态
     * @return
     */
    @Operation(summary = "保存或更新岗位信息")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdate(@RequestBody SystemPost systemPost) {
        if (systemPost.getId() != null && systemPost.getId() > 0) {
            systemPostService.updateById(systemPost);  // 使用 updateById 方法更新记录
        } else {
            systemPostService.save(systemPost);  // 新记录则插入
        }
        return Result.ok();
    }

    /**
     * 根据id删除岗位
     * @param id 传入的岗位id
     * @return
     */
    @DeleteMapping("deleteById")
    @Operation(summary = "根据id删除岗位")
    public Result removeById(@RequestParam Long id) {
        systemPostService.removeById(id);
        return Result.ok();
    }

    /**
     * 根据id获取岗位信息
     * @param id 岗位id
     * @return
     */
    @GetMapping("getById")
    @Operation(summary = "根据id获取岗位信息")
    public Result<SystemPost> getById(@RequestParam Long id) {
        SystemPost systemPost = systemPostService.getById(id);
        return Result.ok(systemPost);
    }

    /**
     * 获取全部岗位列表
     * @return
     */
    @Operation(summary = "获取全部岗位列表")
    @GetMapping("list")
    public Result<List<SystemPost>> list() {
        List<SystemPost> list = systemPostService.list();
        return Result.ok(list);
    }

    /**
     * 根据岗位id修改状态
     * @param id 传入岗位id
     * @param status 岗位状态（1正常 0停用）
     * @return
     */
    @Operation(summary = "根据岗位id修改状态")
    @PostMapping("updateStatusByPostId")
    public Result updateStatusByPostId(@RequestParam Long id, @RequestParam BaseStatus status) {
        LambdaUpdateWrapper<SystemPost> updateWrapper = new LambdaUpdateWrapper<>();
        //判断传入岗位id是否相符
        updateWrapper.eq(SystemPost::getId,id);
        //设置岗位状态为传入状态序号
        updateWrapper.set(SystemPost::getStatus,status);
        //调用Mybatis-Plus提供的封装方法，根据岗位id修改状态
        systemPostService.update(updateWrapper);
        return Result.ok();
    }
}
